package com.taotao.async.task;


import com.taotao.async.task.exception.TaskException;
import com.taotao.async.task.result.TaskResultProccessor;

public interface TaskEngine {

    /**
     * 提交任务
     *
     * @param taskCode
     * @param param
     * @return 任务实例id
     */
    default Long submitTask(String taskCode, String param) {
        return submitTask(TaskHub.getTask(taskCode), param);
    }

    /**
     * 提交任务
     *
     * @param task
     * @param param
     * @return 任务实例id
     */
    Long submitTask(Task task, String param);


    /**
     * 等待任务结束
     *
     * @param taskInstId 任务实例id
     * @param rClass     任务结果
     */
    <T> T waitForTaskResult(Long taskInstId, Class<T> rClass) throws TaskException;


    /**
     * 重试任务
     *
     * @param taskInstId 任务实例id
     */
    void retryTask(Long taskInstId);

    /**
     * 获取任务结果
     *
     * @param taskInstId 任务实例id
     * @param rcb        获取结果后的回调
     */
    void getTaskResult(Long taskInstId, TaskResultProccessor rcb);

}
